﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ControlStock.Dominio;
using System.Data;
using System.Data.SqlClient;


namespace ControlStock.Repositorio
{
    public class PedidosRepositorio
    {
        Conexion Conn;


        public PedidosRepositorio()
        {
            Conn = new Conexion();
        }

        public int Agregar(Pedidos pedido)
        {
            String Consulta = " Insert into PEDIDOS (Ped_Fecha, Ped_Estado, Ped_Observacion, Usu_Id)";

            Consulta += " Values ( getdate() ," + (pedido.Estado_Pedido ? 1 : 0) + ",'" + pedido.Observacion_Pedido + "'," + pedido.Usuario.Id_Usu + ") Select @@Identity";

            return Conn.Insertar(Consulta);
            
        }

        public void Agregarped(int idped, int idart, int cant)
        {
            String consulta = "Insert into PEDIDO_ARTICULO (Ped_Id, Art_Id, Cantidad) VALUES (" + idped + "," + idart + "," + cant + ")";
            Conn.ModificarEliminar(consulta);

        }

        public void Modificar(Pedidos pedido)
        {
            String Consulta = "Update PEDIDOS set Ped_Observacion = '" + pedido.Observacion_Pedido + "', Ped_Estado = " + (pedido.Estado_Pedido ? 1 : 0) + ", Usu_Id = " + pedido.Usuario.Id_Usu + "";

            Consulta += " Where Ped_Id = " + pedido.Id_Pedido + "";
            Conn.ModificarEliminar(Consulta);
        }

        public void Efectivizar(Pedidos Pedido)
        {
            String Consulta = " Select Art_Id, Cantidad From PEDIDO_ARTICULO Where Ped_Id = " + Pedido.Id_Pedido;
            DataTable TablaArticulosPedido = Conn.Buscar(Consulta);
            foreach (DataRow Fila in TablaArticulosPedido.Rows)
            {
                Consulta = " Update DEPOSITO_ARTICULO Set Cantidad = Cantidad - " + Fila["Cantidad"] + " Where Art_Id = " + Fila["Art_Id"];
                Conn.ModificarEliminar(Consulta);
            }
        }
        
        public List<Pedidos> Buscarxusuario(int Idusuario)
        {
            String Consulta = " Select * from PEDIDOS where Id_Usuario = "+ Idusuario +"";
            DataTable TablaPedidos = Conn.Buscar(Consulta);
            List<Pedidos> ListaPedidos = new List<Pedidos>();
            foreach(DataRow Fila in TablaPedidos.Rows)
            {
                ListaPedidos.Add(this.Mapear(Fila));
            }
            return ListaPedidos;
        }


        public List<Pedidos> Listar(string tipousu)
        {
            String Consulta = " Select * from PEDIDOS Where Ped_Estado = 0";
            DataTable TablaPedidos = Conn.Buscar(Consulta);
            
            List<Pedidos> ListaPedidos = new List<Pedidos>();
            foreach (DataRow Fila in TablaPedidos.Rows)
            {
                Pedidos PedidoTemp = this.Mapear(Fila);
                
                Consulta = "Select * From Pedido_Articulo Where Ped_Id = " + Fila["Ped_Id"];
                DataTable TablaArticulosPedido = Conn.Buscar(Consulta);
                Dictionary<Articulos, int> ListaArtCant = new Dictionary<Articulos,int>();
                ArticuloRepositorio repoArticulo = new ArticuloRepositorio();
                foreach (DataRow FilaArt in TablaArticulosPedido.Rows)
                {
                    
                    ListaArtCant.Add(repoArticulo.Buscar(Convert.ToInt32(FilaArt["Art_Id"]),tipousu), Convert.ToInt32(FilaArt["Cantidad"]));
                }
                PedidoTemp.Lista_Articulos_Cantidad = ListaArtCant;
                ListaPedidos.Add(PedidoTemp);
            }
            
            return ListaPedidos;
        }
       
        private Pedidos Mapear(DataRow Fila)
        {
            Pedidos Pedido_mapeado = null;
            if (Fila != null)
            {
                Pedido_mapeado = new Pedidos();
                Pedido_mapeado.Id_Pedido = Fila.IsNull("Ped_Id") ? 0 : Convert.ToInt32(Fila["Ped_Id"]);
                Pedido_mapeado.Fecha_Pedido = Fila.IsNull("Ped_Fecha") ?DateTime.Now : Convert.ToDateTime(Fila["Ped_Fecha"]);//DateTime.Today 
                Pedido_mapeado.Observacion_Pedido = Fila.IsNull("Ped_Observacion") ? "" : Fila["Ped_Observacion"].ToString();
                Pedido_mapeado.Estado_Pedido = Fila.IsNull("Ped_Estado") ? false : (Convert.ToInt32(Fila["Ped_Estado"]) == 1 ? true : false);
                UsuarioRepositorio repoUsuario = new UsuarioRepositorio();
                Pedido_mapeado.Usuario = repoUsuario.Buscar(Fila.IsNull("Usu_Id") ? 0 : Convert.ToInt32(Fila["Usu_Id"]));
                //Pedido_mapeado.Usuario.Id_Usu = Fila.IsNull("Usu_Id") ? 0 : Convert.ToInt32(Fila["Usu_Id"]);

            }
            return Pedido_mapeado;

        }
    }
}
